package org.etherframework.core
{
	import flash.events.Event;
	
	import org.etherframework.behaviour.rules.events.FeedbackEvent;
	import org.etherframework.dependency.DependencyInfo;
	import org.etherframework.wire.wirings.proxyClasses.ProxyInfo;

	public interface IBridgeInteraction
	{
		function getDependency(item:String, access:String, domain:String):Object;
		
		function listenGetDependency(item:String, handler:Function, access:String, domain:String):void;
		
		function unlistenGetDependency(item:String, handler:Function, access:String, domain:String):void;
		
		function dispatchDependencyAdded(info:DependencyInfo, access:String, domain:String):void;
		
		function dispatchDependencyRemoved(info:DependencyInfo, access:String, domain:String):void;
		
		function listenDependencyAdded(item:String, handler:Function, access:String, domain:String):void;
		
		function unlistenDependencyAdded(item:String, handler:Function, access:String, domain:String):void;
		
		function listenDependencyRemoved(item:String, handler:Function, access:String, domain:String):void;
		
		function unlistenDependencyRemoved(item:String, handler:Function, access:String, domain:String):void;
		
		function getMediation(item:String, data:Array, access:String, domain:String):*;
		
		function getProxy(item:String, access:String, domain:String, data:* = null):Array;
		
		function listenGetProxy(item:String, handler:Function, access:String, domain:String):void;
		
		function unlistenGetProxy(item:String, handler:Function, access:String, domain:String):void;
		
		function listenProxyAdded(item:String, handler:Function, access:String, domain:String):void;
		
		function unlistenProxyAdded(item:String, handler:Function, access:String, domain:String):void;
		
		function listenProxyRemoved(item:String, handler:Function, access:String, domain:String):void;
		
		function unlistenProxyRemoved(item:String, handler:Function, access:String, domain:String):void;
		
		function dispatchProxyAdded(proxyInfo:ProxyInfo, access:String, domain:String):void;
		
		function dispatchProxyRemoved(proxyInfo:ProxyInfo, access:String, domain:String):void;
		
		function listenMediation(item:String, handler:Function, access:String, domain:String, priority:Number = 0):void;
		
		function dispatchEvent(event:Event, initiator:Object, access:String, domain:String):Boolean;
		
		function listenEvent(type:String, handler:Function, access:String, domain:String, useCapture:Boolean = false, 
							 priority:Number = 0, useWeakReference:Boolean = false):void;
		
		function unlistenEvent(type:String, handler:Function, access:String, domain:String, useCapture:Boolean = false):void;
		
		function listenFeedback(type:String, handler:Function, access:String, domain:String):void;
		
		function unlistenFeedback(type:String, handler:Function, access:String, domain:String):void;
		
		function dispatchFeedback(item:String, feedback:FeedbackEvent, access:String, domain:String):void;
		
		function dispatchItemWired(item:Object, access:String, domain:String):void;
		
		function listenItemWired(item:Object, handler:Function, access:String, domain:String):void;
		
		function unlistenItemWired(item:Object, handler:Function, access:String, domain:String):void;
		
		function dispatchItemUnwired(item:Object, access:String, domain:String):void;
		
		function listenItemUnwired(item:Object, handler:Function, access:String, domain:String):void;
		
		function unlistenItemUnwired(item:Object, handler:Function, access:String, domain:String):void;
	}
}